bitkeeper revision 1.1159.14.4 (4118d2b68g453DSG6YDQBLmCyvKVgA)
authormjw@wray-m-3.hpl.hp.com <mjw@wray-m-3.hpl.hp.com>
Tue, 10 Aug 2004 13:50:46 +0000 (13:50 +0000)
committermjw@wray-m-3.hpl.hp.com <mjw@wray-m-3.hpl.hp.com>
Tue, 10 Aug 2004 13:50:46 +0000 (13:50 +0000)
Sundry fixes to domain restore.

tools/python/xen/xend/XendDomain.py
tools/python/xen/xend/XendDomainInfo.py
tools/python/xen/xm/main.py
tools/xfrd/xen_domain.c

index 7ae079734ff11b8bed29e6217be7779d5b1dc0a9..ca9cdb25edc401da9ae13fc52fada3bbb300077e 100644 (file)
@@ -375,7 +375,7 @@ class XendDomain:
         def cbok(dominfo):
             self._add_domain(dominfo)
             return dominfo
-        deferred = dominfo.construct(config)
+        deferred = dominfo.dom_construct(dominfo.dom, config)
         deferred.addCallback(cbok)
         return deferred
     
index 056a171fc27099c364349de552499f38b375bd7d..1849db0a8d09e8a85feee73624972f1bedf1ed46 100644 (file)
@@ -295,7 +295,6 @@ def vm_restore(src, progress=0):
     raises   VmError for invalid configuration
     """
     vm = XendDomainInfo()
-    vm.restore = 1
     ostype = "linux" #todo Set from somewhere (store in the src?).
     restorefn = getattr(xc, "%s_restore" % ostype)
     d = restorefn(state_file=src, progress=progress)
@@ -304,11 +303,10 @@ def vm_restore(src, progress=0):
         raise VmError('restore failed')
     try:
         vmconfig = sxp.from_string(d['vmconfig'])
-        vm.config = sxp.child_value(vmconfig, 'config')
+        config = sxp.child_value(vmconfig, 'config')
     except Exception, ex:
         raise VmError('config error: ' + str(ex))
-    deferred = vm.dom_construct(dom)
-    vm.restore = 0
+    deferred = vm.dom_construct(dom, config)
     def vifs_cb(val, vm):
         vif_up(vm.ipaddrs)
     deferred.addCallback(vifs_cb, vm)
@@ -930,7 +928,7 @@ class XendDomainInfo:
         d.addCallback(_vm_configure1, self)
         return d
 
-    def dom_construct(self, dom):
+    def dom_construct(self, dom, config):
         """Construct a vm for an existing domain.
 
         @param dom:    domain id
@@ -940,6 +938,8 @@ class XendDomainInfo:
         if not d:
             raise VmError("Domain not found: %d" % dom)
         try:
+            self.config = config
+            self.restore = 1
             self.setdom(dom)
             self.name = d['name']
             self.memory = d['memory']/1024
@@ -948,6 +948,7 @@ class XendDomainInfo:
                 self.destroy()
                 return err
             deferred.addErrback(cberr)
+            self.restore = 0
         except StandardError, ex:
             self.destroy()
             raise
index 881434a39e511cae9b00d11f8355850fe390fe9f..16cdc0bdbb96989e8dd58de0acbe39f8d3eefd28 100644 (file)
@@ -290,6 +290,9 @@ class ProgRestore(Prog):
         savefile = os.path.abspath(args[1])
         info = server.xend_domain_restore(savefile)
         PrettyPrint.prettyprint(info)
+        id = sxp.child_value(info, 'id')
+        if id is not None:
+            server.xend_domain_unpause(id)
 
 xm.prog(ProgRestore)
 
index e1dacb333f41373cd45369cf459876670d590f0a..7125893998b7f44c890584fa83eca1ac0e6b3e74 100644 (file)
@@ -127,6 +127,9 @@ int xen_domain_rcv(IOStream *io, uint32_t *dom, char **vmconfig, int *vmconfig_n
     ioctxt->err = iostderr;
 
     err = xc_linux_restore(xcinit(), ioctxt);
+    *dom = ioctxt->domain;
+    *vmconfig = ioctxt->vmconfig;
+    *vmconfig_n = ioctxt->vmconfig_n;
 #endif   
     dprintf("< err=%d\n", err);
     return err;